package bean.dao;

import hbt.HibernateUtil;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import bean.Alumno;
import bean.Cuenta;
import bean.Usuario;

public class HibernateCuentasDAO {
	private static HibernateCuentasDAO instancia = null;
	private static SessionFactory sf = null;

	public static HibernateCuentasDAO getInstancia(){
		if(instancia == null){
			sf = HibernateUtil.getSessionFactory();
			instancia = new HibernateCuentasDAO();
		} 
		return instancia;
	}
	
	public Usuario loadUsuario(Usuario usuario){
		Session session = sf.openSession();
		session.load(usuario, usuario.getCuit());
//		session.close(); // Lo dejamos comentado, sino da failed to lazily initialize a collection of role
		return usuario;
	}
	
	public Usuario getUsuario(Usuario usuario){
		Session session = sf.openSession();
		Usuario u = (Usuario) session.get(Usuario.class, usuario.getCuit());
		return u;
	}
	public Cuenta getCuenta(Cuenta cuenta){
		Session session = sf.openSession();
		session.load(cuenta, cuenta.getNumero());
		session.close();
		return cuenta;
	}
	
	public Alumno getAlumno(Alumno alumno){
		Session session = sf.openSession();
		session.load(alumno, alumno.getLu());
		session.close();
		return alumno;
	}
	
	public void guardarAlumno(Alumno alumno){
		Session session = sf.openSession();
		//session.save(alumno);
		session.update(alumno);
		session.close();	
	}

	public void grabarUsuario(Usuario u) throws HibernateException{
		// TODO Auto-generated method stub
		Session session = sf.openSession();
//		session.beginTransaction();
		session.saveOrUpdate(u);
//		session.persist(u);
		session.flush();
		session.close();
		
	}

}
